package modulo3.model;

import java.text.ChoiceFormat;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Comparator;

/**
 *
 * @author jjsanche
 */
public enum AtributoRecordatorio {

    FECHA_REGISTRO(java.util.Calendar.class, new SimpleDateFormat("dd/MM/yyyy"), new Comparator<Recordatorio>() {
        @Override
        public int compare(Recordatorio r1, Recordatorio r2) {
            Calendar c1 = r1.getFechaDeRegistro();
            Calendar c2 = r2.getFechaDeRegistro();

            if (c1.get(Calendar.DAY_OF_MONTH) == c2.get(Calendar.DAY_OF_MONTH)
                    && c1.get(Calendar.MONTH) == c2.get(Calendar.MONTH)
                    && c1.get(Calendar.YEAR) == c2.get(Calendar.YEAR)) {
                return 0;
            } else {
                return r1.getFechaDeRegistro().compareTo(r2.getFechaDeRegistro());
            }
        }

        @Override
        public boolean equals(Object o) {
            return false;
        }
    }),
    FECHA_TERMINO(java.util.Calendar.class, new SimpleDateFormat("dd/MM/yyyy"), new Comparator<Recordatorio>() {
        @Override
        public int compare(Recordatorio r1, Recordatorio r2) {
            Calendar c1 = r1.getFechaDeTermino();
            Calendar c2 = r2.getFechaDeTermino();

            if (c1.get(Calendar.DAY_OF_MONTH) == c2.get(Calendar.DAY_OF_MONTH)
                    && c1.get(Calendar.MONTH) == c2.get(Calendar.MONTH)
                    && c1.get(Calendar.YEAR) == c2.get(Calendar.YEAR)) {
                return 0;
            }
            
            return r1.getFechaDeTermino().compareTo(r2.getFechaDeTermino());
        }

        @Override
        public boolean equals(Object o) {
            return false;
        }
    }),
    PRIORIDAD(Prioridad.class, new ChoiceFormat(new double[]{1, 2, 3}, Arrays.toString(Prioridad.values()).replaceAll("(\\[|\\])", "").split(",")), new Comparator<Recordatorio>() {
        @Override
        public int compare(Recordatorio r1, Recordatorio r2) {
            int p1 = r1.getPrioridad().getValue();
            int p2 = r2.getPrioridad().getValue();

            return p1 > p2 ? -1 : p1 == p2 ? 0 : 1;
        }

        @Override
        public boolean equals(Object o) {
            return false;
        }
    });

    private Comparator comparator;
    private Class tipoClase;
    private java.text.Format format;

    private AtributoRecordatorio(Class tipoClase, java.text.Format format, Comparator comparator) {
        this.comparator = comparator;
        this.tipoClase = tipoClase;
        this.format = format;
    }

    public Comparator getComparator() {
        return comparator;
    }

    public Class getTipoClase() {
        return tipoClase;
    }

    public java.text.Format getFormat() {
        return format;
    }
}
